package com.example.asus.gridview;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
/**GridView的Item是来自ListAdapter的，
 * 所以一般在Activity的onCreate使用GridView的代码如图第30行和31行。
 * 首先写一个类继承BaseAdapter。*/
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

/**Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的区别
 * ArrayAdapter 简单、易用的 Adapter ，通常用于将数组或 List 集合的多个值包装成多个列表项。只能显示一个 TextView。
 * SimpleAdapter 并不简单、功能强大的 Adapter ，可用于将 List 集合的多个对象包装成多个列表项。可以显示图片和文字，但是不能在 Java 代 码中对列表进行后期加工，单纯负责显示。
 * BaseAdapter通常用于被扩展。扩展 BaseAdapter 可以对各列表项进行最大限度的定制。
 * */


public class GridViewActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        setTitle("网格视图");
        GridView gv=(GridView) findViewById(R.id.grid_view);
        gv.setAdapter(new ImageAdapter(this));
    }

    /**ImageAdapter一般是extends BaseAdapter*/
    public class ImageAdapter extends BaseAdapter{
        //定义Context
        private Context mContext;

        /**定义Context*/
        public ImageAdapter(Context c){
            mContext=c;
        }

        /**定义整型数组,图片的引用*/
        private Integer[] mThumbIds={R.drawable.grid_view_01,
                R.drawable.grid_view_02, R.drawable.grid_view_03,
                R.drawable.grid_view_04,R.drawable.grid_view_05,
                R.drawable.grid_view_06,R.drawable.grid_view_07,
                R.drawable.grid_view_08, R.drawable.grid_view_09,
                R.drawable.grid_view_10,R.drawable.grid_view_11,
                R.drawable.grid_view_12,R.drawable.grid_view_13,
                R.drawable.grid_view_14, R.drawable.grid_view_15};

        /**Adapter接口里面的方法
         * 1.获取图片的个数*/
        public int getCount(){
            return mThumbIds.length;
        }

        /**2.获取图片在库中的位置*/
        public Object getItem(int arg0){
            return null;
        }

        /**3.获取图片ID*/
        public long getItemId(int arg0){
            return 0;
        }

        @Override
        /**getView和ImageView是重点，影响图片的显示效果*/
        public View getView(int position,View convertView,ViewGroup parent){
            ImageView imageView;
            /**留意getView里面的代码如图第66行，要判断convertView是否为null，
             * 以便重用，减少对象的创建，减少内存占用。*/
            if(convertView==null)
            {
                /**针对每一个数据（即每一个图片ID）创建一个ImageView实例，针对外面传递过来的mContext变量*/
                imageView=new ImageView(mContext);
                /**设置ImageView中每一个图片的大小为85*85*/
                imageView.setLayoutParams(new GridView.LayoutParams(85,85));
                /**设置显示比例类型*/
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8,8,8,8);
            }
            else
            {
                /**convertview的作用是：只需要设定新的数据返回convertView,不必重新创建一个视图。
                 * 这样直接使用convertView从而减少了很不不必要view的创建*/
                imageView=(ImageView)convertView;
            }

            imageView.setImageResource(mThumbIds[position]);
            return imageView;
        }
    }
}
